package com.MarkToTop.util;

import sun.font.FontDesignMetrics;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @CreateDate: Created in 2022-06-22 11:22
 * @Author: hbian
 * @Description:
 */
public class GameUtil {

    //私有的目的是不让其他类进行实例化
    private GameUtil(){}

    /**
     * 加载图片
     * @param imgPath 图片路径名
     * @return
     */
    public static BufferedImage loadBufferedImage(String imgPath){
        try {
            return ImageIO.read(new FileInputStream(imgPath));
        }catch (IOException e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 求本次调用该方法时，对于概率性的时间是否发生的方法
     * @param num 取值范围是[1-100] 代表事件发生的概率的百分比1代表1%。
     * @return 如果该事件发生了，返回true，否则返回false。
     */
    public static boolean isInPercent(final int num){
        return getRandomNumber(1, 101) <= num;
    }

    /**
     * 求任意的概率的事件是否发生的方法
     * @param numerator  分子部分  应该提供一个大于0的值
     * @param denominator 分母部分
     * @return 如果概率事件发生了，返回true，否则返回false.
     */
    public static boolean isInAnyProbability(int numerator, int denominator)throws Exception{
        //处理的特殊情况
        if(numerator <= 0 || denominator <= 0){
            throw new Exception("传入了非法的参数!");
        }
        //一定发生的事件
        if(numerator >= denominator){
            return true;
        }

        return getRandomNumber(1, denominator+1) <= numerator;
    }


    /**
     * 求指定区间的随机数的方法
     * @param min 区间最小值，包含
     * @param max 区间最大值，不包含。
     * @return 该区间的随机数
     */
    public static int getRandomNumber(int min, int max){
        return (int)(Math.random() * (max-min)+min);
    }


    public static int getStringWidth(Font font , String str){
        FontMetrics fm = FontDesignMetrics.getMetrics(font);
        return fm.stringWidth(str);//文字的宽度
    }

    public static int getStringHeight(Font font , String str){
        FontMetrics fm = FontDesignMetrics.getMetrics(font);
        return fm.getHeight();//文字高度
    }
}
